package org.example;

public class 第六章_运算符 {
    public static void main(String[] args) {
        //加法
        System.out.println("使用加法运算符计算10+20: "+ (int)(10+20));
        //减法
        System.out.println("使用减法运算符计算10-20: "+ (int)(10-20));
        //乘法
        System.out.println("使用乘法运算符计算10*20: "+ (int)(10*20));
        //除法
        System.out.println("使用除法运算符计算100/20: "+ (int)(100/20));
        //取余
        System.out.println("使用取余运算符计算100%27: "+ (int)(100%27));
        //自增
        int i = 0;
        System.out.println("使用自增运算符计算自增i: "+ ++i);
        //自减
        System.out.println("使用自增运算符计算自减i: "+ --i);

        //关系运算符
        //== 检查如果两个操作数的值是否相等，如果相等则条件为真。
        System.out.println("10 == 20 :"+(10==20));
        //!= 检查如果两个操作数的值是否相等，如果值不相等则条件为真。
        System.out.println("10 != 20 :"+(10!=20));
        //> 检查左操作数的值是否大于右操作数的值，如果是那么条件为真。
        System.out.println("10 > 20 :"+(10>20));
        //< 检查左操作数的值是否小于右操作数的值，如果是那么条件为真。
        System.out.println("10 < 20 :"+(10<20));
        //>= 检查左操作数的值是否大于或等于右操作数的值，如果是那么条件为真。
        System.out.println("10 >= 20 :"+(20>=20));
        //<= 检查左操作数的值是否小于或等于右操作数的值，如果是那么条件为真。
        System.out.println("10 <= 20 :"+(10<=20));

        //位运算符
        //＆ 如果相对应位都是1，则结果为1，否则为0
        System.out.println("60 & 10 ="+(60&10));
        //| 如果相对应位都是 0，则结果为 0，否则为 1
        System.out.println("60 | 10 ="+(60|10));
        //^ 如果相对应位值相同，则结果为0，否则为1
        System.out.println("60 ^ 10 ="+(60^10));
        //〜 按位取反运算符翻转操作数的每一位，即0变成1，1变成0。
        System.out.println("~60 ="+(~60));
        //<< 按位左移运算符。左操作数按位左移右操作数指定的位数。
        System.out.println("60<<2 ="+(60<<2));
        //>> 按位右移运算符。左操作数按位右移右操作数指定的位数。
        System.out.println("60>>2 ="+(60>>2));
        //>>> 按位右移补零操作符。左操作数的值按右操作数指定的位数右移，移动得到的空位以零填充。
        System.out.println("60>>>2 ="+(60>>>2));

        //逻辑运算符
        //&& 称为逻辑与运算符。当且仅当两个操作数都为真，条件才为真。
        System.out.println("60<=100 && 20>100: "+(60<=100 && 20>100));
        //|| 称为逻辑或操作符。如果任何两个操作数任何一个为真，条件为真。
        System.out.println("60<=100 || 20>100: "+(60<=100 || 20>100));
        //! 称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true，则逻辑非运算符将得到false。
        System.out.println("!(60<=100 || 20>100): "+!(60<=100 || 20>100));

        //赋值运算符
        int a=10,b=20,c=50;
        // = 简单的赋值运算符，将右操作数的值赋给左侧操作数
        c = a + b;
        //+= 加和赋值操作符，它把左操作数和右操作数相加赋值给左操作数
        c += 1;
        //-= 减和赋值操作符，它把左操作数和右操作数相减赋值给左操作数
        c -= 1;
        //*= 乘和赋值操作符，它把左操作数和右操作数相乘赋值给左操作数
        c *= 1;
        ///= 除和赋值操作符，它把左操作数和右操作数相除赋值给左操作数
        c /= 1;
        //%= 取模和赋值操作符，它把左操作数和右操作数取模后赋值给左操作数
        c %= 25;
        //<<= 左移位赋值运算符
        c <<= 2;
        //>>= 右移位赋值运算符
        c >>= 2;
        //&= 按位与赋值运算符
        c &= 2;
        //^= 按位异或赋值操作符
        c ^= 2;
        //|= 按位或赋值操作符
        c |= 2;

        //条件运算符（?:）
        System.out.println(1==2 ? "1==2" : "1!=2");

        //instanceof 运算符
        Integer p = 1;
        System.out.println("p == Integer: " + (p instanceof Integer));
    }
}
